package demo01;


public class Test1 {
    public static void main(String[] args) {
        //并发：多线程操作同一个资源类
        Ticket ticket = new Ticket();
       /*
        new Runnable()看源码可以发现他是一个@FunctionalInterface函数式接口，接口不能实例化，
        但是可以用匿名内部类实现他，但是这个比价繁琐，
        所以在jdk1.8,可以使用lambdas表达式(参数)->{代码}实现。
        */
       /*
       new Thread(new Runnable(){
              @Override
              public void run(){

              }
          }).start();
       */
       new Thread(() ->{
           for (int i = 1; i <40 ; i++) {
               ticket.sale();
           }
           },"A").start();
        new Thread(() ->{
            for (int i = 1; i <40 ; i++) {
                ticket.sale();
            }
        },"B").start();
        new Thread(() ->{
            for (int i = 1; i <40 ; i++) {
                ticket.sale();
            }
        },"C").start();
    }
}
// 资源类 OOP
class Ticket {
            //属性、方法
            private int number = 30;

            //卖票的方式
            public synchronized void sale() {
                if (number > 0) {
                    System.out.println(Thread.currentThread().getName() + "卖出了第" + (number--) + "张票剩余" + number + "张票");
                }
            }
        }

